package cn.xanderye.mdblog.base;

import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 通用Service
 * @author 叶振东
 * @date 2019-03-19
 */
public interface BaseService<T> {

    /**
     *  根据id查询实体
     * @param id : id
     * @return : T
     */
    @GetMapping("queryById")
    T queryById(Object id);

    /**
     *  查询所有
     * @return : List<T>
     */
    @GetMapping("queryAll")
    List<T> queryAll();

    /**
     *  条件查询
     * @param param : T
     * @return : 查询结果集
     */
    @PostMapping("queryListByWhere")
    List<T> queryListByWhere(@RequestBody T param);

    /**
     *  查询记录数
     * @param param : T
     * @return : 查询数量
     */
    @PostMapping("queryCount")
    Integer queryCount(@RequestBody T param);

    /**
     *  分页查询
     * @param param : T
     * @param page : 页码
     * @param rows : 行数
     * @return : 返回结果集
     */
    @PostMapping("queryPageListByWhere")
    PageInfo<T> queryPageListByWhere(@RequestBody T param, @RequestParam Integer page, @RequestParam Integer rows);

    /**
     *  查询一条记录
     * @param param : t
     * @return : T
     */
    @PostMapping("queryOne")
    T queryOne(@RequestBody T param);

    /**
     *  插入
     * @param param : T
     * @return : 保存数量
     */
    @PostMapping("save")
    Integer save(@RequestBody T param);

    /**
     *  新增非空字段
     * @param param : T
     * @return : 新增数量
     */
    @PostMapping("saveSelect")
    Integer saveSelect(@RequestBody T param);

    /**
     * 批量插入
     * @param list : list<T>
     * @return : 插入数量
     */
    @PostMapping("saveList")
    Integer saveList(@RequestBody List<T> list);

    /**
     *  根据主键更新
     * @param param : T
     * @return : 更新数量
     */
    @PostMapping("update")
    Integer update(@RequestBody T param);

    /**
     *  根据主键更新非空字段
     * @param param : 实体类
     * @return : 更新个数
     */
    @PostMapping("updateSelective")
    Integer updateSelective(@RequestBody T param);

    /**
     *  根据主键删除
     * @param id : id
     * @return : 删除个数
     */
    @PostMapping("deleteById")
    Integer deleteById(Object id);

    /**
     * 条件删除
     * @param param : 对象
     * @return :
     */
    @PostMapping("delete")
    Integer delete(@RequestBody T param);
}
